﻿using PraceDyplomowe.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace PraceDyplomowe
{
    public class FalszywaBazaDanych
    {
        private static FalszywaBazaDanych instancja;
        private List<Promotor> promotorzy;
        private List<Praca> prace;


        private FalszywaBazaDanych()
        {
            this.promotorzy = new List<Promotor>
            {
                new Promotor
                {
                    Id = 1,
                    Imie = "Tomek",
                    Nazwisko = "Bury",
                    NrTelefonu= "603 065 034",
                    Email = "sury.dawid@gmail.com",
                    Wydzial = "Matematyka i Informatyka",
                    Zainteresowania = "Bazy Danych",
                    Konsultacje = "pn - pt: 24/7",
                    Publikacje = "Tutorial pt. \"Jak stworzyć pierwszego HelloWorlda\"",
                    Zdjecie = "/Zdjecia/terranLogo_1920x1200.jpg"
                },
                new Promotor()
                {
                    Id = 2,
                    Imie = "Tomek",
                    Nazwisko = "Bury",
                    NrTelefonu= "sto dziewiencet",
                    Email = "sury.dawid@gmail.com",
                    Wydzial = "Matematyka i Informatyka",
                    Zainteresowania = "Bazy Danych",
                    Konsultacje = "pn - pt: 24/7",
                    Publikacje = "Tutorial pt. \"Jak stworzyć pierwszego HelloWorlda\"",
                    Zdjecie = "moje zdjęcie"
                }
            };

            this.prace = new List<Praca>
            {
                new Praca()
                {
                    Id = 1, 
                    PolskiTytul = "Rozproszone bazy danych",
                    AngielskiTytul = "Distributed database",
                    Promotor = promotorzy.First(),
                    Wydzial = "Matematyka i Informatyka",
                    Opis = "nie dodano",
                    Bibliografia = "własna"
                }
            };


        }

        public static FalszywaBazaDanych Instancja
        {
            get
            {
                if (instancja == null)
                    instancja = new FalszywaBazaDanych();
                return instancja;
            }
        }


        /// <summary>
        /// metoda pobiera wszystkie dane ze źródła
        /// </summary>
        /// <returns></returns>
        public List<Promotor> PobierzPromotorow()
        {
            return this.promotorzy;
        }

        /// <summary>
        /// metoda pobiera pojedyńczego promotora
        /// </summary>
        /// <param name="id"></param>
        /// <returns>
        /// zwracany jest obiekt promotora
        /// </returns>
        public Promotor PobierzPromotora(int id)
        {
            return promotorzy.SingleOrDefault(p => p.Id == id);
        }

        /// <summary>
        /// metoda pobiera promotora na podstawie tożsamości użytkownika
        /// </summary>
        /// <param name="identity"></param>
        /// <returns></returns>
        public Promotor PobierzPromotora(System.Security.Principal.IIdentity identity)
        {
            return promotorzy.FirstOrDefault();
        }

        /// <summary>
        /// metoda filtrująca promotorów
        /// </summary>
        /// <param name="nazwisko"></param>
        /// <returns></returns>
        public List<Promotor> SzukajPromotora(string nazwisko)
        {
            return promotorzy;
        }

        internal void Zapisz(Promotor promotor)
        {
            promotorzy = promotorzy.Where(p => p.Id != promotor.Id).ToList();
            promotorzy.Add(promotor);
        }

        /// <summary>
        /// metoda pobiera wszystkie dane ze źródła
        /// </summary>
        /// <returns></returns>
        public List<Praca> PobierzListePrac()
        {
            return this.prace;
        }

        /// <summary>
        /// metoda pobiera pojedyńczą pracę
        /// </summary>
        /// <param name="id"></param>
        /// <returns>
        /// zwracany jest obiekt pracy
        /// </returns>
        public Praca PobierzPrace(int id)
        {
            return prace.SingleOrDefault(p => p.Id == id);
        }

        /// <summary>
        /// metoda pobiera prace na podstawie id pracy
        /// </summary>
        /// <param name="identity"></param>
        /// <returns></returns>
        public Praca PobierzPrace(System.Security.Principal.IIdentity identity)
        {
            return prace.FirstOrDefault();
        }

        /// <summary>
        /// metoda filtrująca wszystkie prace
        /// </summary>
        /// <param name="nazwisko"></param>
        /// <returns></returns>
        public List<Praca> SzukajPracy(string temat)
        {
            return prace;
        }

        /// <summary>
        /// dodaje do listy
        /// </summary>
        /// <param name="praca"></param>
        internal void ZapiszPrace(Praca praca)
        {
            prace = prace.Where(p => p.Id != praca.Id).ToList();
            prace.Add(praca);
        }
    }
}